//
//  main.m
//  04-集合(二)
//
//  Created by dllo on 16/7/7.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Contact.h"
#import "ContactManager.h"
int main(int argc, const char * argv[]) {
   
#pragma mark - 字典
    /*
     存储键值对(key-value)的集合类型
     字典中存储数据没有顺序
     通过key值存储,查询 value
     */
    
    // 1 初始化
    // initWithObjectsAndKeys:value, key, value, key,...
    // 字典中只能存放对象类型(NSObject的子类)
    NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"li", @"name", @"18", @"age", nil];
    // 2 便利构造器
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"li", @"name", @"18", @"age", nil];
    // 3 字面量 @{key : value, key: value}
    NSDictionary *diction = @{@"name": @"水杯", @"age": @12, @"fullname": @"水杯"};
    
    // 4 取值
    // 通过key取value
    [diction objectForKey:@"name"];
    // 获取所有的key
    NSArray *allKeys = dict.allKeys;
    // 获取所有的value
    NSArray *allValues = diction.allValues;
    // count
    NSUInteger count = diction.count;
    // 通过数组取出数组中元素对应的value值
    [diction objectsForKeys:allKeys notFoundMarker:[NSString class]];
    // 通过一个对象,查找value是这个对象的所有key
    [diction allKeysForObject:@"水杯"];
    // 语法糖取值
    NSLog(@"%@", diction[@"name"]);
    
#pragma mark - 可变字典 NSMutableDictionary
    // 初始化方式 与 不可变字典基本相同
    NSMutableDictionary *mutableDic = [NSMutableDictionary dictionaryWithCapacity:0];
    
    // 取值 与不可变字典相同
    
    // 增 删 改
    // 如果key已经存在, 会将之前的value覆盖 如果key不存在,添加新的键值对
    [mutableDic setObject:@"书包" forKey:@"name"];
    // 删除
    [mutableDic removeObjectForKey:@"name"];
    [mutableDic removeAllObjects];
    [mutableDic removeObjectsForKeys:@[@"name"]];
    
#warning mark -
    // 语法糖与setObject:forkey相同
    mutableDic[@"age"] = @20;
    
#pragma mark - 练习一
    Contact *contact = [Contact contactWithName:@"Gyx" phoneNumber:@"110"];
    contact.sender = @"女";
    contact.address = @"LA";
    contact.groupName = @"G";
    contact.age = 18;
    
    Contact *contact1 = [Contact contactWithName:@"Lst" phoneNumber:@"120"];
    contact1.groupName = @"L";
    contact.age = 18;
    
    Contact *contact2 = [Contact contactWithName:@"Dj" phoneNumber:@"110"];
    contact2.groupName = @"D";
    contact.age = 18;
    [contact showContact];

    NSMutableDictionary *contactDic = [NSMutableDictionary dictionary];
    
    ContactManager *contactManager = [[ContactManager alloc] initWithDictionary:contactDic];
    [contactManager addContact:contact];
    [contactManager addContact:contact1];
    [contactManager addContact:contact2];
    NSLog(@"%@", contactManager.contactDic);
  
#pragma mark - NSNumber转换为字符串
    [@10 description];
    
#pragma mark - 集合
    // NSSet 与 NSMutableSet
    // 1> 初始化
    // 集合会删除掉重复的内容(互异性)
    // 要删除数组中重复的内容,放入集合中
    NSSet *set = [[NSSet alloc] initWithObjects:@"gyx", @"gyx", nil];
    NSSet *setObject = [NSSet setWithObjects:@"水杯", @"水杯", nil];
    // 集合去重(删除掉数组中重复的元素)
    NSArray *repeatArr = @[@"123", @"456", @"123"];
    NSSet *repeatSet = [NSSet setWithArray:repeatArr];
    NSLog(@"%@", repeatSet);
    // 没有提供集合的字面量
    
    // 取值
    // 从集合中取出任意元素
    [set anyObject];
    // 元素个数count
    NSUInteger setCount = set.count;
    
    // NSMutableSet
    // 1.初始化与不可变集合一样
    // 2.取值 anyObject
    // 3.可变性
    NSMutableSet *mutableSet = [NSMutableSet set];

    // 添加
    [mutableSet addObject:@"123"];
    // 删除
    [mutableSet removeObject:@"123"];
    [mutableSet removeAllObjects];
    
    return 0;
}
